#include <stdio.h>
#include <string.h>
#include <mysql/mysql.h>

#define HOST "127.0.0.1"
#define USER "root"
#define PASS "Zyt023717"
#define DBNAME "gobang"
#define PORT 3306

int main()
{
    // 1.初始化mysql句柄
    MYSQL *mysql = mysql_init(NULL);
    if (mysql == NULL)
    {
        printf("mysql init failed!\n");
        return -1;
    }

    // 2.连接服务器
    // MYSQL *mysql_real_connect(mysql,host,user,passwd,dbname,port,unix_socket,flag);
    if (mysql_real_connect(mysql, HOST, USER, PASS, DBNAME, PORT, NULL, 0) == NULL)
    {
        printf("connect mysql server failed : %s\n", mysql_errno(mysql));
        mysql_close(mysql);
        return -1;
    }

    // 3.设置客户端字符集
    if (mysql_set_character_set(mysql, "utf8") != 0)
    {
        printf("set client character failed : %s\n", mysql_errno(mysql));
        mysql_close(mysql);
        return -1;
    }

    // 4.选择要操作的数据库
    // 默认选择过了，在mysql_real_connect处
    // int mysql_select_db(mysql.DBNAME);

    // 5.执行sql语句
    // int mysql_query(MYSQL *mysql,char *sql);
    //char *sql = "insert stu value(null,'小明',18,53,68,87);"; //增
    //char *sql = "update stu set ch=ch+40 where sn=1;"; //改
    //char *sql = "delete from stu where sn=1;"; //删
    char *sql = "select * from stu;";
    int ret = mysql_query(mysql, sql);
    if (ret != 0)
    {
        printf("%s\n", sql);
        printf("mysql query failed : %s\n", mysql_errno(mysql));
        mysql_close(mysql);
        return -1;
    }

    // 6.如果sql语句是查询语句，则需要保存结果到本地
    //MYSQL_RES *mysql_store_result(MYSQL *mysql)
    MYSQL_RES *res = mysql_store_result(mysql);
    if(res==NULL)
    {
        mysql_close(mysql);
        return -1;
    }

    // 7.获取结果集中的条数
    //uint64_t mysql_num_rows(MYSQL_RES *result)； //获取行数
    //unsigned int mysql_num_fields(MYSQL_RES *result) //获取列数
    int num_row =  mysql_num_rows(res);
    int num_col =  mysql_num_fields(res);

    // 8.遍历本地的结果集
    for(int i=0;i<num_row;i++) //行打印
    {
        //MYSQL_ROW mysql_fetch_row(MYSQL_RES *result)
        MYSQL_ROW row = mysql_fetch_row(res);
        for(int j=0;j<num_col;j++)
        {
            printf("%s\t",row[j]);
        }
        printf("\n");
    }

    // 9.释放结果集
    mysql_free_result(res);

    // 10.关闭连接，释放句柄
    mysql_close(mysql);

    return 0;
}